package Risk.IHM;

import Risk.Moteur.Pays;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;

import java.util.Vector;

public class PaysIHM {
    //le rayon de la pastille qui affiche le nombre d'armees sur un pays
    private static final int	RAYON = 10;
    //boolean pour le clic de la souris
    public boolean		clique;
    private Color		couleur, couleurTexte;
    //pour acceder aux methodes de la classe Pays
    private Pays		p;
    //vecteur des points de la meme couleur
    private Vector<Point>	pixels;
    //coordonnees
    private int			x, y;

    /**
     * constructeur du pays en mode graphique
     * @param p - le pays
     * @param pixels - le vecteur des pixels du pays
     * @param couleur - couleur de base du pays
     * @param x - coordonnee x du centre du pays
     * @param y - coordonnee y du centre du pays
     */
    public PaysIHM(Pays p, Vector<Point> pixels, Color couleur, int x, int y) {
	this.p       = p;
	this.x       = x;
	this.y       = y;
	this.pixels  = pixels;
	this.couleur = couleur;
	clique       = false;
	changerCouleurNbArmees();
    }

    /**
     * methode qui change la couleur du texte du nombre d'armees sur un pays
     */
    public void changerCouleurNbArmees() {

	/* Ecriture en noir ou en blanc du nb d'armees */
	int	r = p.getJoueur().getCouleur().getRed();
	int	g = p.getJoueur().getCouleur().getGreen();
	int	b = p.getJoueur().getCouleur().getBlue();

	if (((r + g + b) / 3.0) > 122.5) {
	    couleurTexte = Color.BLACK;
	} else {
	    couleurTexte = Color.WHITE;
	}
    }

    /**
     * methode de dessin des possessions des joueurs
     * @param g - le graphique 
     * @param imgCarte - la panel de l'image de la carte
     */
    public void dessiner(Graphics g, ImageCarte imgCarte) {
        //si l'on decide d'afficher les possesions des joueurs
        //on dessine le pays de la couleur du joueur qui le possede
	if (imgCarte.isAfficherPossessions()) {
	    for (int i = 0; i < pixels.size(); i++) {
		Point	pt = pixels.get(i);

		g.setColor(p.getJoueur().getCouleur());
		g.fillRect(pt.x, pt.y, 1, 1);
	    }
	}
        //lors du clic de la souris
	if (clique) {
	    for (int i = 0; i < pixels.size(); i++) {
		Point	pt = pixels.get(i);

		// ou autre couleur
		g.setColor(Color.gray);
		g.fillRect(pt.x, pt.y, 1, 1);
	    }
	} else { //dans tous les autres cas
	    g.setColor(Color.black);
	}
        //dessin du contour de la pastille 
	g.fillOval(x - RAYON + 1, y - RAYON + 1, (RAYON + 1) * 2, (RAYON + 1) * 2);
	g.setColor(p.getJoueur().getCouleur());
        //dessin de la pastille
	g.fillOval(x - RAYON, y - RAYON, RAYON * 2, RAYON * 2);
	g.setColor(Color.black);
        // coordonnees pour dessiner la string contenant le nombre d'armees du joueur sur le pays
	int	x1 = x - g.getFontMetrics().stringWidth("" + p.getNbArmee()) / 2;
	int	y1 = y + (g.getFontMetrics().getHeight()) / 3;

	// DEBUG
	// System.out.println("centre = ("+x+";"+y+") | string = ("+x1+";"+y1+")");
        //appel de la methode qui change la couleur de dessin du nombre d'armees
        //en fonction de la couleur du joueur qui a conquit le pays (claire ou foncee)
	changerCouleurNbArmees();
        //2 valeurs pour la couleur du nb d'armees : noir ou blanc
	g.setColor(couleurTexte);
	g.drawString("" + p.getNbArmee(), x1, y1);
    }

    /**
     * getter sur la couleur du pays
     * @return - la couleur du pays
     */
    public Color getCouleur() {
	return couleur;
    }

    /**
     * getter sur la couleur du texte du nombre d'armees sur le pays
     * @return - la couleur du texte dans la pastille
     */
    public Color getCouleurTexte() {
	return couleurTexte;
    }
    /**
     * getter
     * @return le pays (moteur)
     */
    public Pays getPays() {
	return p;
    }

    /**
     * getter sur la coordonnee x
     * @return la coordonnee x
     */
    public int getX() {
	return x;
    }

     /**
     * getter sur la coordonnee y
     * @return la coordonnee y
     */
    public int getY() {
	return y;
    }

    /**
     * setter sur la couleur du pays ihm
     * @param couleur - la nouvelle couleur
     */
    public void setCouleur(Color couleur) {
	this.couleur = couleur;
    }

    /**
     * setter sur le sur un pays ihma couleur du text
     * @param couleurTexte - la nouvelle couleur du texte
     */
    public void setCouleurTexte(Color couleurTexte) {
	this.couleurTexte = couleurTexte;
    }

    /**
     * setter sur la coordonnee x
     * @param x - la nouvelle coordonnee x
     */
    public void setX(int x) {
	this.x = x;
    }

     /**
     * setter sur la coordonnee y
     * @param y - la nouvelle coordonnee y
     */
    public void setY(int y) {
	this.y = y;
    }
}
